{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5de73ca3-4246-4fb6-8f07-2f5dd5fd001f",
   "metadata": {},
   "source": [
    "#### part 1."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d5044db-5310-4e39-8215-751da130032d",
   "metadata": {},
   "source": [
    "假设袋子里有红白两种球分别用1和0表示，比例为$p:1-p$,假设变量X：$$X=\\begin{cases}1&\\text{p}\\\\0&\\text{1-p}\\end{cases}$$\n",
    "   满足伯努利分布，$p$为未知变量。可以根据抽样样本$x_1,x_2,\\cdots,x_n$计算$p$:$$p=\\frac{\\sum\\limits_{i=1}^n{x_i}}{n}$$其实就是所有$x_i=1$的样本个数除以样本总数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b75eb8e-f933-4389-ae9b-4e333f2da9dd",
   "metadata": {},
   "source": [
    "#### part 2."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "593d8121-4463-497b-8706-0df26dcca456",
   "metadata": {},
   "source": [
    "假设有两个袋子，各自都有红球(1)和白球(0)若干，每次从第一个袋子取球的概率为$w$,第二个袋子取球的概率$1-w$;第1个袋子取得红球和白球的概率分别为$p$和$1-p$;第2个袋子取得红球和白球的概率分别为$q$和$1-q$。\n",
    " | 袋子编号| 红球 | 白球 | \n",
    "|---| --- | --- |\n",
    "|①|$p$| $1-p$ | \n",
    "|②|$q$ | $1-q$| \n",
    "<!-- <div style=\"text-align: center;\">\n",
    "    <img src=\"img/01.png\" width=\"227\" height=\"189\">\n",
    "</div> -->\n",
    "将从第1个袋子和第2个袋子的取球概率看做权重，可以得到联合概率分布如下：\n",
    "\n",
    "  | 袋子编号| 红球 | 白球 | \n",
    "|---| ---: | ---: |\n",
    "|①|$wp$| $w(1-p)$ | \n",
    "|②|$(1-w)q$ | $(1-w)(1-q)$| \n",
    "<!-- <div style=\"text-align: center;\">\n",
    "    <img src=\"img/02.png\" width=\"337\" height=\"172\">\n",
    "</div>\n",
    " -->\n",
    "假设$w,p,q$已知,则红球和白球的取球概率如下：$$\\begin{cases} p(X=1) = wp+(1-w)q \\\\ p(X=0) = w(1-p) + (1-w)(1-q)\\end{cases}$$\n",
    "用变量$X$表示球的颜色，1表示红球，0表示白球；用变量$Z$表示袋子，1表示第一个袋子，2表示第二个袋子：\n",
    "$$\\begin{cases} p(Z=1|X=1) = \\frac{wp}{wp+(1-w)q}\\\\ \n",
    "        p(Z=2|X=1) = \\frac{(1-w)q}{wp+(1-w)q}  \\\\ \n",
    "        p(Z=1|X=0) = \\frac{w(1-p)}{w(1-p) + (1-w)(1-q)}\\\\\n",
    "        p(Z=2|X=0) = \\frac{(1-w)(1-q)}{w(1-p) + (1-w)(1-q)}\\end{cases}$$\n",
    "ps:大写字母$X$表示随机变量,小写字母$x$表示随机变量$X$的某个具体的取值; "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4bc7218b-7cad-4e04-ae51-2d2f9b131e86",
   "metadata": {},
   "source": [
    "(1)假设$\\theta = (w,p,q)$未知，从总体X中抽取容量为n的样本，取值为$x_1,x_2,\\cdots,x_n$,用这些样本去估计未知参数，$x_i$的概率密度函数为：$$f(x_i) = wp^{x_i}(1-p)^{1-x_i}+(1-w)q^{x_i}(1-q)^{1-x_i}$$\n",
    "似然函数为:$$ L(\\theta;x) = \\prod\\limits_{i=1}^n f(x_i)$$ 等价于$$L(\\theta;x) = \\prod\\limits_{i=1}^n(wp+(1-w)q)^{x_i}(w(1-p)+(1-w)(1-q))^{1-x_i}$$\n",
    "参数估计的最终目标就是要找到$\\theta$使得似然函数最大：$$\\theta^{\\star} = \\arg\\max\\limits_{\\theta} L(\\theta;x)$$\n",
    "令$$\\mathcal{P} = wp+(1-w)q$$$$1-\\mathcal{P} = w(1-p)+(1-w)(1-q)$$则最大似然函数过程为$$\\max\\limits_{\\theta}\\prod\\limits_{i=1}^n{\\mathcal{P}^{x_i}(1-\\mathcal{P})^{1-x_i}}$$\n",
    "根据伯努利分布的性质可知：$$\\mathcal{P} =\\frac{k}{n}$$时，可以达到最大似然值。也就是说,$w,p,q$只要满足以下方程即可：$$wp+(1-w)q = \\frac{k}{n}$$\n",
    "三个未知数一个方程，当给定其中两个变量的值，就能计算出第三个变量的值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75638641-5507-4504-82ff-981be9c6b721",
   "metadata": {},
   "source": [
    "(2) 上面的方法计算未知参数，更像是是一种特例，从另一个角度进行参数估计:假设给出初始值$p^{(0)},q^{(0)},w^{(0)}$,抽样的取值为$x_1,x_2,\\cdots,x_n$,列出表格，设$x_i$在第一个袋子红球的概率为$a_i$，其余三种情况分别为$b_i,c_i,d_i$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "343b5398-5c4e-4219-b1f2-f92b7eec5a52",
   "metadata": {},
   "source": [
    "  | | $x_1$ | $x_2$| $\\cdots$| $\\cdots$|$x_n$|\n",
    "---| ---: | ---: | ---: | ---: |---: |\n",
    "|第1个袋子红球|$a_1=\\frac{wp}{wp+(1-w)q}$| $a_2$ | $\\cdots$| $\\cdots$|$a_n$\n",
    "|第1个袋子白球|$b_1=\\frac{w(1-p)}{w(1-p) + (1-w)(1-q)}$ | $b_2$| $\\cdots$| $\\cdots$|$b_n$\n",
    "|第2个袋子红球|$c_1=\\frac{(1-w)q}{wp+(1-w)q}$| $c_2$ | $\\cdots$| $\\cdots$|$c_n$\n",
    "|第2个袋子白球|$d_1= \\frac{(1-w)(1-q)}{w(1-p) + (1-w)(1-q)}$ | $d_2$| $\\cdots$| $\\cdots$|$d_n$\n",
    "|概率总和|1|1|$\\cdots$| $\\cdots$|1\n",
    "\n",
    "<!-- <div style=\"text-align: center;\">\n",
    "    <img src=\"img/03.png\" width=\"525\" height=\"362\">\n",
    "</div> -->"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8af579e-4b53-4e37-b3e1-6154380076e6",
   "metadata": {},
   "source": [
    "根据表格可以进行重新估计：\n",
    "\n",
    "- 取第一个袋子的概率:$$w^{(1)}=\\frac{\\sum\\limits_{i=1}^n{a_i}+\\sum\\limits_{i=1}^n{b_i}}{n}$$\n",
    "- 第1个袋子取得红色球的概率：$$p^{(1)} = \\frac{\\sum\\limits_{i=1}^n{a_i}}{\\sum\\limits_{i=1}^n{a_i}+\\sum\\limits_{i=1}^n{b_i}}$$\n",
    "- 第2个袋子取得红色球的概率：$$q^{(1)} = \\frac{\\sum\\limits_{i=1}^n{c_i}}{\\sum\\limits_{i=1}^n{c_i}+\\sum\\limits_{i=1}^n{d_i}}$$\n",
    "\n",
    "重复迭代上述参数估计过程，直到参数$w^{(k)},p^{(k)},q^{(k)}$收敛。以上迭代估计得到模型参数的过程，就是EM算法的过程，最终结果可能是局部最优解。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81760a72-5681-4ead-a138-e3527f5114cc",
   "metadata": {},
   "source": [
    "#### part 3."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fda20efc-1c74-4613-abf4-9c2b752f7fec",
   "metadata": {},
   "source": [
    "假设有k个高斯分布:$N(\\mu_1,\\sigma_1^2),N(\\mu_2,\\sigma_2^2),\\cdots,N(\\mu_k,\\sigma_k^2)$;抽取每个高斯分布的概率为:$w_1,w_2,\\cdots,w_k$,满足$\\sum\\limits_{i=1}^k w_i = 1$。第j个高斯分布的概率密度函数为：\n",
    "$$f_j(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma_j}\\exp{\\{-\\frac{(x-\\mu_j)^2}{2\\sigma_j^2}\\}}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66eec2ee-6aa9-4b70-baca-a9b432d9e2a7",
   "metadata": {},
   "source": [
    "设随机变量X的概率密度函数为:$$\\sum_{i=1}^k{w_i}f_i(x)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b546f88-ae34-46a2-a934-bf78d9beec7e",
   "metadata": {},
   "source": [
    "随机抽样值为$x_1,x_2,\\cdots,x_n$，估计最优的$\\mu_j,\\sigma_j,w_j$。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "595d5290-b660-4dc9-8327-971afec57b2d",
   "metadata": {},
   "source": [
    "设参数为$\\theta$极大似然估计表示为:\n",
    "$$L(\\theta;x) = \\prod\\limits_{i=1}^n{\\sum\\limits_{j=1}^k{w_jf_j(x_i)}}$$\n",
    "其对数似然函数：\n",
    "$$L(\\theta;x) = \\sum\\limits_{i=1}^n{\\log{\\sum\\limits_{j=1}^k{w_jf_j(x_i)}}}$$\n",
    "利用梯度下降的方式计算最大似然估计很难求解，因此考虑EM算法。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2780ab4c-07c9-4272-b0df-3dcf51c1f8e1",
   "metadata": {},
   "source": [
    "举个简单的栗子，取k(k是超参数，需要根据经验设定)等于2，随机变量X是从2个正态分布中生成的，假设给出了一组初始化参数：$\\mu_j^{(0)},\\sigma_j^{(0)},w_j^{(0)}$其中$j=1,2$,同样列表梳理计算过程："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7582a6b-5cd0-431f-bff1-2ee83d315dc0",
   "metadata": {},
   "source": [
    "  | | $x_1$ | $x_2$| $\\cdots$| $\\cdots$|$x_n$|\n",
    "---| ---: | ---: | ---: | ---: |---: |\n",
    "|分布1|$w_{11}$| $w_{21}$ | $\\cdots$| $\\cdots$|$w_{n1}$\n",
    "|分布2|$w_{12}$ | $w_{22}$| $\\cdots$| $\\cdots$|$w_{n2}$\n",
    "|概率总和|1|1|$\\cdots$| $\\cdots$|1\n",
    "<!-- <div style=\"text-align: center;\">\n",
    "    <img src=\"img/04.png\" width=\"349\" height=\"216\">\n",
    "</div> -->\n",
    "\n",
    "其中$w_{ij}$表示为第i个样本的在第j个分布的概率：$$w_{ij} = \\frac{w_jf_j(x_i)}{\\sum\\limits_{l=1}^2 w_lf_l(x_i)}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2268fdf3-0688-4b79-9043-a438cb46a8b5",
   "metadata": {},
   "source": [
    "重新估计参数：\n",
    "\n",
    "- 分布的估计：$$w_1^{(1)} = \\frac{\\sum\\limits_{i=1}^n w_{i1}}{n}\\quad\\quad w_2^{(1)} = \\frac{\\sum\\limits_{i=1}^n w_{i2}}{n}$$\n",
    "- 均值的估计：$$\\mu_1^{(1)} = \\frac{\\sum\\limits_{i=1}^n w_{i1}x_i}{\\sum\\limits_{i=1}^n w_{i1}}\\quad\\quad \\mu_2^{(1)} = \\frac{\\sum\\limits_{i=1}^n w_{i2}x_i}{\\sum\\limits_{i=1}^n w_{i2}}$$\n",
    "- 方差的估计：$$\\sigma_1^{(1)} = \\sqrt{\\frac{\\sum\\limits_{i=1}^n w_{i1}(x_i-\\mu_1^{(1)})^2}{\\sum\\limits_{i=1}^n w_{i1}}}\\quad\\quad \\sigma_2^{(1)} = \\sqrt{\\frac{\\sum\\limits_{i=1}^n w_{i2}(x_i-\\mu_2^{(1)})^2}{\\sum\\limits_{i=1}^n w_{i2}}}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37707656-a5d8-46d8-86b8-7e2fca736c67",
   "metadata": {},
   "source": [
    "重复上述估计过程，直到$w_j^{(k)},\\mu_j^{(k)},\\sigma_j^{(k)}$收敛。一般情况下，高维高斯分布也是适用的，假设维度为2的高斯分布，此时密度函数$f_j$为二维高斯分布，$\\mu$为元素个数为2的向量，$\\Sigma$为$2\\times 2$的协方差矩阵。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "f097801a-a491-478e-a8c5-83744c9c26b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "sns.set()\n",
    "%matplotlib inlie\n",
    "\n",
    "n1 = np.random.normal(1,0.5,100000)\n",
    "n2 = np.random.normal(2,1,100000)\n",
    "\n",
    "sns.kdeplot(n1,fill=True, common_norm=False, \n",
    "   alpha=.5, linewidth=0,label='N(1,0.25)')\n",
    "sns.kdeplot(n2,fill=True, common_norm=False,\n",
    "   alpha=.5, linewidth=0,label='N(2,1)')\n",
    "\n",
    "plt.legend()\n",
    "plt.title('Normal Distribution Example')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5687dff-a846-4c6e-aa70-9d805895826d",
   "metadata": {},
   "source": [
    "#### part 4."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d1462fe-5c35-4013-a5dd-9a09665e0034",
   "metadata": {},
   "source": [
    "三硬币模型：假设有3枚硬币，分别记作A,B,C。这些硬币正面出现的概率分别是$\\pi,p,q$。进行如下掷硬币试验：先掷硬币A，根据其结果选出硬币B或硬币C，正面选硬币B，反面选硬币C；然后掷选出的硬币，掷硬币的结果正面记作1，反面记作0；独立重复n次试验（这里，n=10）,观测结果$x_i$如下：$$1,1,0,1,0,0,1,0,1,1$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fecc5e1-c352-4791-ad48-e07ed57a0825",
   "metadata": {},
   "source": [
    "$x_i$的概率密度函数为$$f(x_i) = \\pi p^{(x_i)}(1-p)^{(1-x_i)} + (1-\\pi)q^{(x_i)}(1-q)^{(1-x_i)}$$\n",
    "这个例子就是part2的变形。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8be5088b-a9f2-48d6-8be4-938392b60862",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
